typedef enum { typeCon, typeId, typeOpr } nodeEnum;

/* constant or identifier */
/* leaf node */
typedef struct {
   int value_or_i;                  /* value of constant or
                                       subscript to ident array */
} con_or_idNodeType;

/* operator */
/* internal node */
typedef struct {
   int oper;                   /* operator */
   int nops;                   /* number of operands */
   struct nodeTypeTag* op[1];  /* operands (expandable) */
} oprNodeType;

typedef struct nodeTypeTag {

   nodeEnum type;              /* type of node */

   /* union must be last entry in nodeType */
   /* because operNodeType may dynamically increase */
   union {
      con_or_idNodeType con_or_id;        /* constants or identifiers */
      oprNodeType opr;        /* operators */
   };
} nodeType;

extern int symtab[26];
